home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 35 / PC Gamer IT CD 35 1-2.iso / Elink / NSCOMM / NCJS10.JAR / additem.js next >
Text File  |  1997-10-20  |  10KB  |  399 lines

  1. /* 
  2.  * Additem.js
  3.  * 
  4.  * Copyright (c) 1997 Netscape Communications Corporation, All Rights Reserved
  5.  * 
  6.  */
  7.  
  8. var selector = null;
  9. var container;
  10. var containerObject = null;
  11. var gProps = null;
  12.  
  13.  
  14. function handleLoad() {
  15.     gProps = null;
  16.  
  17.     opener.PropertiesCallback(this);
  18.  
  19.     // after we've filled the item, for additions, make sure that we
  20.     // are allowed to add before going further.
  21.  
  22.     containerObject = selector.parent.titlebar.document.demo.findContainerByName(container);
  23.  
  24.     if ((gProps == null) && (containerObject != null)) {
  25.         if (!containerObject.getCanAddItems()) {
  26.             alert(window.depth.getLocalString("addBlocked"));
  27.             self.close();
  28.         }
  29.     }
  30.  
  31.     // on enter for the dialog, set the focus to the dialog
  32.     window.focus();
  33.     window.document.layers['general'].document.scheduler.name.focus();
  34.  
  35.     // For Castanet channels, disable the cache tab
  36.     if (gProps != null) {
  37.         var propType = gProps.getType();
  38.  
  39.         if (propType == 2) {
  40.             window.document.layers['cacheTab'].visibility="hide";
  41.         }
  42.     }
  43. }
  44.  
  45.  
  46. function ValidateGeneral(prefsWindow)
  47. {
  48.     var generalLayer = prefsWindow.document.layers['general'];
  49.     var form     = generalLayer.document.scheduler;
  50.  
  51.     if (fieldEmpty(form.elements['name'])) {
  52.         alert(window.depth.getLocalString("You must specify a name for this channel"));
  53.         form.elements['name'].focus();
  54.         form.elements['name'].select();
  55.         return false;
  56.     }
  57.  
  58.     if (fieldEmpty(form.url)) {
  59.         alert(window.depth.getLocalString("You must specify a location for this channel"));
  60.         form.url.focus();
  61.         form.url.select();
  62.         return false;
  63.     } else {
  64.         var newURL = null;
  65.         
  66.         newURL = selector.parent.titlebar.document.demo.getValidURL(form.url.value);
  67.         if (newURL == null) {
  68.             form.url.focus();
  69.             form.url.select();
  70.             alert(window.depth.getLocalString("invalidURL"));
  71.             return false;
  72.         } else {
  73.             form.url.value = newURL;
  74.         }
  75.     }
  76.  
  77.     return true;
  78. }
  79.  
  80. function UpdateTimeFields(prefsWindow)
  81. {
  82.     var generalLayer    = prefsWindow.document.layers['general'];
  83.     var form            = generalLayer.document.scheduler;
  84.     var newInterval        = form.freq.options[form.freq.selectedIndex].value;
  85.     var specialLayer;
  86.  
  87.     if (newInterval == "-5") {
  88.         generalLayer.document.layers['weekLayer'].visibility="hide";
  89.  
  90.         specialLayer = generalLayer.document.layers['dayLayer'];
  91.         specialLayer.visibility="show";
  92.  
  93.     } else if (newInterval == "-6") {
  94.         generalLayer.document.layers['dayLayer'].visibility="hide";
  95.  
  96.         specialLayer = generalLayer.document.layers['weekLayer'];
  97.         specialLayer.visibility="show";
  98.     } else {
  99.         generalLayer.document.layers['weekLayer'].visibility="hide";
  100.         generalLayer.document.layers['dayLayer'].visibility="hide";
  101.     }
  102.  
  103.     return;
  104. }
  105.  
  106. function FormValues(prefsWindow) {
  107.     var scheduler = prefsWindow.document.layers['general'].document.scheduler;
  108.     var cache     = prefsWindow.document.layers['cache'].document.cache;
  109.     var display   = prefsWindow.document.layers['display'].document.winType;
  110.     var day          = prefsWindow.document.layers['general'].layers['dayLayer'].document.times;
  111.     var week      = prefsWindow.document.layers['general'].layers['weekLayer'].document.times;
  112.  
  113.     this.index  = scheduler.index.value;
  114.  
  115.     this.name   = scheduler.name.value; 
  116.     this.url    = scheduler.url.value; 
  117.  
  118.     if ((this.url != null) &&
  119.         ((this.url.indexOf("castanet") != -1) || (this.url.indexOf("?start")==(this.url.length-6))) ) {
  120.         this.type = 2;
  121.     } else {
  122.         this.type   = scheduler.type.value; 
  123.     }
  124.  
  125.     this.active = scheduler.active.checked;
  126.     this.freq   = scheduler.freq.options[scheduler.freq.selectedIndex].value;
  127.  
  128.     if (this.freq == "-5" ) {
  129.         this.time   = day.time.value; 
  130.         this.ampm   = day.ampm.options[day.ampm.selectedIndex].value; 
  131.     }
  132.     else if (this.freq == "-6" ) {
  133.         this.time   = week.time.value; 
  134.         this.ampm   = week.ampm.options[week.ampm.selectedIndex].value;; 
  135.         this.day    = week.day.options[week.day.selectedIndex].value; 
  136.     }
  137.  
  138.     this.depth  = cache.depth.value; 
  139.     this.size   = cache.size.value;
  140.     this.inSiteOnly = (cache.external.value == "0")
  141.  
  142.     this.mode   = prefsWindow.document.layers['display'].mode;
  143. }
  144.  
  145. function handleOK() {
  146.     var props = gProps;
  147.     var updateTimer = false;
  148.  
  149.     if ( !ValidateGeneral(window) ) return;
  150.  
  151.     var form = new FormValues(window);
  152.  
  153.     if (form.index == "-1") {
  154.  
  155.         var oldData = selector.parent.titlebar.document.demo.findItemByName(form.name);
  156.         if (oldData != null) {
  157.               if (!confirm(window.depth.getLocalString("A channel with the name ") + form.name + window.depth.getLocalString(" already exists.")))
  158.                 return;
  159.         }
  160.  
  161.         var newName = selector.parent.titlebar.document.demo.getEncodedName(form.name, container);
  162.         if (newName == null || newName == "") {
  163.             alert("An error occurred while saving the item");
  164.         }
  165.  
  166.         var prefName = "netcaster.channel." + newName;
  167.  
  168.         props = selector.parent.titlebar.document.demo.newDataItem(form.url);
  169.         props.setPrefsKey(prefName);
  170.     } else {
  171.  
  172.       props.setURL(form.url);
  173.     }
  174.  
  175.     props.setItemName(form.name);
  176.  
  177.     if (props.getType() != 2)
  178.     {
  179.         props.setDepth(java.lang.Integer.parseInt(form.depth));
  180.         var tmp = (parseInt(form.size) * 1024);
  181.         props.setMaxSize(java.lang.Integer.parseInt(tmp));
  182.  
  183.         if (form.inSiteOnly) {
  184.             props.setCrawlInSite(java.lang.Boolean.TRUE);
  185.         }
  186.         else {
  187.             props.setCrawlInSite(java.lang.Boolean.FALSE);
  188.         }
  189.  
  190.     }
  191.  
  192.     var newFreq = java.lang.Integer.parseInt(form.freq);
  193.     if (form.index != "-1") {
  194.         updateTimer = (props.getFrequency() != newFreq);
  195.     }
  196.     props.setFrequency(newFreq);
  197.  
  198.     var time = parseTimeForBackend(form);
  199.     if (time == -10) {
  200.       alert("Please enter a valid time for the update to occur.");
  201.       return;
  202.     }
  203.  
  204.     if (form.index != "-1") {
  205.         updateTimer |= (props.getUpdateTime() != time);
  206.     }
  207.     props.setUpdateTime(java.lang.Integer.parseInt(time));
  208.  
  209.     if (form.active) {
  210.         props.setScheduled(java.lang.Boolean.TRUE);
  211.     }
  212.     else {
  213.         props.setScheduled(java.lang.Boolean.FALSE);
  214.     }
  215.  
  216.     props.setType(java.lang.Integer.parseInt(form.type));
  217.     props.setMode(form.mode);
  218.  
  219.     if (form.index == "-1") {
  220.         selector.parent.titlebar.document.demo.addItem(props, container);
  221.     }
  222.     else {
  223.         props.changed();
  224.  
  225.         if (updateTimer == 1) {
  226.           props.updateProps();
  227.         }
  228.     }
  229.  
  230.     if (opener.EditCallback && opener.EditCallback != null) {
  231.         if (form.index == -1) {
  232.             opener.EditCallback(true);
  233.         } else {
  234.             opener.EditCallback(false);
  235.         }
  236.     }
  237.         
  238.     self.close();
  239. }
  240.  
  241. function editItem(props) {
  242.     var scheduler = document.layers['general'].document.scheduler;
  243.     var cache = document.layers['cache'].document.cache;
  244.  
  245.      scheduler.index.value  = 0;
  246.     gProps                    = props;
  247.     scheduler.name.value   = props.getItemName();
  248.     scheduler.url.value    = props.getURL();
  249.     scheduler.type.value   = props.getType();
  250.     scheduler.freq.value   = props.getFrequency();
  251.     scheduler.interval.value = props.getFrequency();
  252.     scheduler.active.checked = (props.getScheduled());
  253.  
  254.     parseTimeForFrontend(document.layers['general'], scheduler, props.getUpdateTime());
  255.  
  256.     if (props.getType() == 2)
  257.     {
  258.         cache.depth.value        = 0;
  259.         cache.size.value         = "" + (parseInt(props.getMaxSize()));
  260.     }
  261.     else {
  262.         cache.depth.value        = props.getDepth();
  263.         cache.size.value         = "" + (parseInt(props.getMaxSize()) / 1024);
  264.  
  265.         if (props.crawlInSite()) {
  266.             cache.external.value     = "0";
  267.         } else {
  268.             cache.external.value     = "1";
  269.         }
  270.     }
  271.  
  272.     var mode = props.getMode();
  273.  
  274.     mode = mode + "";
  275.     switch (mode) {
  276.         case "webtop":
  277.             document.layers['display'].document.forms["winType"].mode[1].checked = true;
  278.             break;
  279.         case "full":
  280.             document.layers['display'].document.forms["winType"].mode[0].checked = true;
  281.             break;
  282.         case "window":
  283.             document.layers['display'].document.forms["winType"].mode[0].checked = true;
  284.     }
  285.     document.layers['display'].ChangeThumbnail();
  286. }
  287.  
  288. function parseTimeForFrontend(first, form, time) {
  289.     var tmp = 0;
  290.     var applet = selector.parent.titlebar.document.demo;
  291.     
  292.     for (tmp = 0; tmp < form.freq.length; tmp++) {
  293.         if (form.interval.value == form.freq[tmp].value)
  294.             form.freq.selectedIndex = tmp;
  295.     }
  296.  
  297.     if ( form.interval.value == '-6' ) {
  298.         var week = first.layers['weekLayer'].document.times;
  299.         if (time < 1440)
  300.             tmp = 0;
  301.         else
  302.             tmp = time / 1440;
  303.  
  304.         week.day.selectedIndex = parseInt(tmp);
  305.         time = time - ( (parseInt(tmp) * 1440) );
  306.     }
  307.     if ( parseInt(form.interval.value) <= -5 ) {
  308.         var week = first.layers['weekLayer'].document.times;
  309.         var day = first.layers['dayLayer'].document.times;
  310.  
  311.         if (time < 720)
  312.              tmp = 0;
  313.         else
  314.             tmp = 1;
  315.  
  316.         if ( parseInt(form.interval.value) == -6 ) 
  317.             week.ampm.selectedIndex = parseInt(tmp);
  318.         else
  319.             day.ampm.selectedIndex = parseInt(tmp);
  320.         time -= parseInt( (parseInt(tmp) * 720) );
  321.  
  322.         // Find the hour
  323.         tmp = time / 60;
  324.  
  325.         if (isNaN(parseInt(tmp))) {
  326.             tmp = 0;
  327.         }
  328.  
  329.         time -= (parseInt(tmp) * 60);
  330.  
  331.         if ( parseInt(time) < 10 )
  332.             time = "0" + parseInt(time);
  333.         else
  334.             time = parseInt(time);
  335.  
  336.         if (parseInt(tmp) == 0) {
  337.             tmp = 12;
  338.         }
  339.  
  340.         if ( parseInt(form.interval.value) == -6 ) {
  341.             week.time.value = parseInt(tmp) + ":" + time;
  342.         }
  343.         else {
  344.             day.time.value = parseInt(tmp) + ":" + time;
  345.         }
  346.         UpdateTimeFields(window);
  347.     }
  348. }
  349.  
  350. function parseTimeForBackend(form) {
  351.     var ret    = -1;
  352.     var applet = selector.parent.titlebar.document.demo;
  353.     
  354.     if ( parseInt(form.freq) <= -5 ) {
  355.         var hour, minute;
  356.         if (!applet.validateTimeString(form.time))
  357.             return -10;
  358.         
  359.         hour = applet.getHour(form.time);
  360.  
  361.         minute = applet.getMinute(form.time);
  362.  
  363.         var hourInt = parseInt(hour);
  364.         
  365.         if (hourInt == 12) {
  366.             hourInt = 0;
  367.         }
  368.  
  369.         hourInt = hourInt * 60;
  370.         var minInt = parseInt(minute);
  371.         if ((hourInt < 0) && (minInt <= 0))
  372.             return -10;
  373.  
  374.         ret = hourInt + minInt + parseInt(form.ampm);
  375.  
  376.         if (ret > 1440)
  377.             return -10;
  378.  
  379.     }
  380.     if ( form.freq == '-6' ) {
  381.         ret += parseInt(form.day);
  382.     }
  383.  
  384.     return ret;
  385. }
  386.  
  387. function clearCache() {
  388.   var props = gProps;
  389.  
  390.   props.clearCache();
  391. }
  392.  
  393. function cancelUpdate() {
  394.     var props = gProps;
  395.  
  396.     props.cancelUpdate();
  397. }
  398.  
  399. void(0);